Spring Cloud Gateway একটি আধুনিক API গেটওয়ে যা Routing, Filters, এবং Predicates এর মাধ্যমে HTTP রিকোয়েস্টগুলিকে রাউট এবং পরিচালনা করতে সহায়তা করে। এর মাধ্যমে সার্ভিসগুলো সহজে রাউট করা যায়, ফিল্টারিং করা যায় এবং নির্দিষ্ট শর্তে কাজ করতে পারে। নিচে Routing, Filters, এবং Predicates এর ব্যবহার তুলে ধরা হয়েছে।
১. Routing
Routing এর মাধ্যমে API গেটওয়ে রিকোয়েস্টগুলোকে নির্দিষ্ট সার্ভিসের কাছে পাঠায়। Spring Cloud Gateway রাউটিং কনফিগারেশন application.yml ফাইলে করা হয়।
১.১ Routing কনফিগারেশন উদাহরণ:
spring:
cloud:
gateway:
routes:
- id: route1
uri: http://example-service:8081 # Destination service URI
predicates:
- Path=/service1/** # Path Predicate
filters:
- AddRequestHeader=X-Request-Foo, Bar
- id: route2
uri: http://another-service:8082
predicates:
- Path=/service2/** # Path Predicate
filters:
- AddRequestHeader=X-Request-Foo, Baz
এখানে দুটি রাউট তৈরি করা হয়েছে:
route1:/service1/**পাথে আসা রিকোয়েস্টগুলোexample-serviceএ রাউট করা হবে।route2:/service2/**পাথে আসা রিকোয়েস্টগুলোanother-serviceএ রাউট করা হবে।
২. Predicates
Predicates হল শর্ত যা রিকোয়েস্টের সাথে ম্যাচ করে এবং কোন রাউট নির্বাচন করা হবে তা নির্ধারণ করে। Spring Cloud Gateway-এ বিভিন্ন ধরনের Predicate রয়েছে, যা আপনি Path, Method, Host, Query, Header ইত্যাদি দ্বারা কনফিগার করতে পারেন।
২.১ Common Predicates:
Path Predicate: রিকোয়েস্ট URL পাথের উপর ভিত্তি করে রাউটিং সিদ্ধান্ত নেয়।
predicates: - Path=/service1/**Method Predicate: রিকোয়েস্ট মেথডের উপর ভিত্তি করে রাউট নির্বাচন করা হয় (যেমন:
GET,POST, ইত্যাদি)।predicates: - Method=POSTHost Predicate: রিকোয়েস্ট হোস্টনেমের উপর ভিত্তি করে রাউট নির্বাচন করা হয়।
predicates: - Host=example.comQuery Predicate: URL এর কুয়েরি প্যারামিটার দিয়ে রাউট নির্বাচন করা হয়।
predicates: - Query=param=valueHeader Predicate: রিকোয়েস্ট হেডারে নির্দিষ্ট ভ্যালু দিয়ে রাউট নির্বাচন করা হয়।
predicates: - Header=X-Request-Foo=Bar
২.২ Multiple Predicates:
একাধিক Predicates ব্যবহার করে একসাথে শর্ত দেওয়া যায়। প্রতিটি Predicate যেকোনো সময়ে OR বা AND শর্তে যুক্ত হতে পারে। একাধিক Predicate যোগ করতে:
predicates:
- Path=/service1/**
- Method=GET
- Header=X-Request-Foo=Bar
এটি রিকোয়েস্টের Path /service1/** হতে হবে, মেথড GET হওয়া উচিত এবং X-Request-Foo হেডারে Bar থাকতে হবে।
৩. Filters
Filters Spring Cloud Gateway-এ HTTP রিকোয়েস্ট এবং রেসপন্সে পরিবর্তন আনার জন্য ব্যবহৃত হয়। Filters ক্লায়েন্ট থেকে সার্ভারে যাওয়া রিকোয়েস্ট অথবা সার্ভার থেকে ক্লায়েন্টে যাওয়া রেসপন্সের ওপর কাজ করতে পারে।
৩.১ Filter Types:
- Global Filters: গ্লোবাল ফিল্টার সমস্ত রিকোয়েস্ট এবং রেসপন্সে প্রযোজ্য হয়।
- Route-specific Filters: নির্দিষ্ট রাউটের জন্য Filters প্রযোজ্য হয়।
৩.২ Common Filters:
AddRequestHeader: রিকোয়েস্ট হেডারে নতুন হেডার যোগ করে।
filters: - AddRequestHeader=X-Request-Foo, BarAddResponseHeader: রেসপন্স হেডারে নতুন হেডার যোগ করে।
filters: - AddResponseHeader=X-Response-Foo, BazSetPath: রিকোয়েস্টের পাথ পরিবর্তন করে।
filters: - SetPath=/newpath/**RewritePath: পাথ রাইটারে প্রি-ডিফাইন্ড পাথ দিয়ে রিকোয়েস্ট রাউট করে।
filters: - RewritePath=/service/(?<segment>.*), /new-service/${segment}RequestRateLimiter: রিকোয়েস্ট রেট লিমিটিং পরিচালনা করে।
filters: - RequestRateLimiter=redis-rate-limiter.replenishRate=10, redis-rate-limiter.burstCapacity=20
৩.৩ Custom Filters:
Spring Cloud Gateway-এ আপনি কাস্টম ফিল্টার তৈরি করতে পারেন। উদাহরণস্বরূপ, একটি কাস্টম ফিল্টার যা রিকোয়েস্টে লগিং যোগ করবে:
import org.springframework.web.server.ServerWebExchange;
import org.springframework.web.server.WebFilter;
import org.springframework.web.server.WebFilterChain;
import org.springframework.stereotype.Component;
import reactor.core.publisher.Mono;
@Component
public class LoggingFilter implements WebFilter {
@Override
public Mono<Void> filter(ServerWebExchange exchange, WebFilterChain chain) {
// Log the incoming request path
System.out.println("Request Path: " + exchange.getRequest().getURI().getPath());
return chain.filter(exchange);
}
}
এটি গেটওয়ে রিকোয়েস্টে প্রক্রিয়া শুরু হওয়ার আগে রিকোয়েস্টের পাথ লগ করবে। কাস্টম ফিল্টার স্প্রিং বুট অ্যাপ্লিকেশনের মধ্যে @Component অ্যানোটেশন দিয়ে রেজিস্টার করা যেতে পারে।
৪. Advanced Routing Example
Spring Cloud Gateway-এর ব্যবহার কনফিগারেশন উদাহরণ:
spring:
cloud:
gateway:
routes:
- id: route1
uri: http://service1:8080
predicates:
- Path=/api/service1/**
- Method=GET
- Header=X-Request-Foo=Bar
filters:
- AddRequestHeader=X-Request-Id, 12345
- AddResponseHeader=X-Response-Time, 67890
এটি /api/service1/** পাথ, GET মেথড এবং X-Request-Foo=Bar হেডার সহ রিকোয়েস্টগুলোর জন্য service1 সার্ভিসে রাউট করবে, এবং রিকোয়েস্ট এবং রেসপন্সে অতিরিক্ত হেডার যোগ করবে।
সারাংশ:
- Routing: Spring Cloud Gateway রিকোয়েস্টের পাথ, মেথড, হেডার, কুয়েরি প্যারামিটার ইত্যাদির মাধ্যমে রিকোয়েস্টকে নির্দিষ্ট সার্ভিসে রাউট করে।
- Predicates: শর্ত, যা রিকোয়েস্টের বৈশিষ্ট্য দ্বারা রাউট নির্বাচন করতে সহায়তা করে। যেমন,
Path,Method,Header,Host,Queryইত্যাদি। - Filters: রিকোয়েস্ট এবং রেসপন্সের উপর পরিবর্তন আনে, যেমন হেডার যোগ করা, রাউটিং পাথ পরিবর্তন করা, অথবা কাস্টম ফিল্টার তৈরি করা।
Spring Cloud Gateway এর মাধ্যমে আপনি শক্তিশালী API গেটওয়ে কনফিগারেশন করতে পারেন, যা কাস্টম রাউটিং, ফিল্টারিং এবং শর্তাবলী প্রদান করে, এর মাধ্যমে মাইক্রোসার্ভিসে রিকোয়েস্ট পরিচালনা করা হয়।
Read more